#STM32串口中断异常 #串口无限进入中断 #debug
使用STM32CubeMX配置了串口中断后,实际硬件没有反应,串口接受也没有反应。反复检查了几遍,配置也并没有错误。 经过反复排查,发现CubeMX在配置串口中断没有填加使能函数 也就是下面这句
c
__HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);
整体的串口初始化(默认在usart.c文件中配置)配置完成后应该与下面相似,除了我在下面代码中加入注释的部分,其余STM32CubeMX都是默认配置好的
c
void MX_USART2_UART_Init(void)
{
huart2.Instance = USART2;
huart2.Init.BaudRate = 9600;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
huart2.Init.Mode = UART_MODE_TX_RX;
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
HAL_UART_Init(&huart2);
/* USER CODE BEGIN USART2_UART_Init 0 */
__HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE); //默认不配置,需要手动添加
/* USER CODE END USART2_UART_Init 0 */
}
但这样设置会导致无限进入串口中断,原因目前不明
后来发现可以这样设置:
c
//数据缓冲区
uint8_t Uart1RX_Data,Uart2RX_Data,Uart3RX_Data;
void MX_USART2_UART_Init(void)
{
huart2.Instance = USART2;
huart2.Init.BaudRate = 9600;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
huart2.Init.Mode = UART_MODE_TX_RX;
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
HAL_UART_Init(&huart2);
/* USER CODE BEGIN USART2_UART_Init 0 */
HAL_UART_Receive_IT(&huart1,&Uart1RX_Data,1);
//__HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE); //默认不配置,需要手动添加
/* USER CODE END USART2_UART_Init 0 */
}
使用HAL_UART_Receive_IT(&huart1,&Uart1RX_Data,1);
不使用__HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);
配合串口中断回调:
c
//串口接收中断回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
HAL_UART_Transmit(&huart1,"Hello,EnterUART_RxCpltCallback\r\n",26,0xFFFF);
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_5);; /* LED0 状态取反 */
if(huart->Instance == USART1)
{
HAL_UART_Transmit(&huart1,&Uart1RX_Data,1,0xFFFF);
HAL_UART_Receive_IT(&huart1,&Uart1RX_Data,1);
}
if(huart->Instance == USART2)
{
HAL_UART_Transmit(&huart2,&Uart2RX_Data,1,0xFFFF);
HAL_UART_Receive_IT(&huart2,&Uart2RX_Data,1);
}
}
可以正常实现功能:
参考链接:
STM32CubeMX串口中断配置后无效问题的解决 https://blog.csdn.net/qq_46135352/article/details/107427082